home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 October / CHIP 1996 oktober (CD08).zip / CHIP_CD08.BIN / sac / pack / rar200sp.exe / rar / NOTASTEC.DOC < prev    next >
Text File  |  1995-09-27  |  10KB  |  379 lines

  1.  
  2.  ██████╗   █████╗  ██████╗
  3.  ██╔══██╗ ██╔══██╗ ██╔══██╗     RAR versión 2.00 - Información Técnica
  4.  ██████╔╝ ███████║ ██████╔╝     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  5.  ██╔══██╗ ██╔══██║ ██╔══██╗
  6.  ██║  ██║ ██║  ██║ ██║  ██║
  7.  ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝
  8.  
  9.            ┌──────────────────────────────────────────────────┐
  10.            │ EL FORMATO DE ARCHIVO DESCRITO A CONTINUACION ES │
  11.            │ VALIDO SOLO PARA VERSIONES POSTERIORES A LA 1.50 │
  12.            └──────────────────────────────────────────────────┘
  13.  
  14.  ╔════════════════════════════════════════════════════════════════════════╗
  15.  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Formato de los ficheros RAR ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  16.  ╚════════════════════════════════════════════════════════════════════════╝
  17.  
  18.    Los ficheros están constituidos por bloques de longitud variable. El
  19. orden de estos bloques puede variar, pero el primer bloque debe ser
  20. siempre un bloque de identificación seguido de un bloque de cabecera de
  21. archivo.
  22.  
  23.    Cada bloque empieza con los siguientes campos:
  24.  
  25. HEAD_CRC       2 bytes     CRC total o parcial del bloque
  26. HEAD_TYPE      1 byte      Tipo de bloque
  27. HEAD_FLAGS     2 bytes     Flags del bloque
  28. HEAD_SIZE      2 bytes     Tamaño del bloque
  29. ADD_SIZE       4 bytes     Tamaño del campo adicional
  30.  
  31.    El campo ADD_SIZE sólo está presente si (HEAD_FLAGS & 0x8000) != 0
  32.  
  33.    El tamaño total del bloque es HEAD_SIZE si (HEAD_FLAGS & 0x8000) == 0
  34. y HEAD_SIZE+ADD_SIZE si el campo ADD_SIZE está presente - cuando
  35. (HEAD_FLAGS & 0x8000) != 0.
  36.  
  37.    En cada bloque los siguientes bits en HEAD_FLAGS tienen el mismo
  38. significado:
  39.  
  40.   0x4000 - Si está activado, viejas versiones de RAR ignorarán el
  41.        bloque y lo borrarán cuando el archivo sea actualizado.
  42.        Si está a cero, el bloque es copiado al nuevo archivo
  43.        cuando el archivo es actualizado.
  44.  
  45.   0x8000 - Si está activado, el campo ADD_SIZE está presente y el
  46.        tamaño total del bloque es HEAD_SIZE+ADD_SIZE.
  47.  
  48.   Tipos válidos de bloques:
  49.  
  50. HEAD_TYPE=0x72          bloque de identificación
  51. HEAD_TYPE=0x73          cabecera de archivo
  52. HEAD_TYPE=0x74          cabecera de fichero
  53. HEAD_TYPE=0x75          cabecera de comentario
  54. HEAD_TYPE=0x76          información extra
  55. HEAD_TYPE=0x77          sub-bloque
  56. HEAD_TYPE=0x78          protección
  57.  
  58.    El bloque de comentario es usado actualmente sólo dentro de otros
  59. bloques y no existe por separado.
  60.  
  61.    El proceso del fichero se realiza de la siguiente forma:
  62.  
  63. 1. Leer y comprobar bloque de identificación
  64. 2. Leer cabecera de archivo
  65. 3. Leer o saltar HEAD_SIZE-sizeof(MAIN_HEAD) bytes
  66. 4. Si se llegó al final del archivo entonces acaba el proceso
  67.    del archivo, si no, leer 7 bytes en los campos HEAD_CRC,
  68.    HEAD_TYPE, HEAD_FLAGS, HEAD_SIZE.
  69. 5. Comprobar HEAD_TYPE.
  70.    Si es necesario leer el bloque:
  71.      si HEAD_TYPE==0x74
  72.        leer cabecera de fichero
  73.         ( los primeros 7 bytes ya han sido leídos )
  74.        leer o saltar HEAD_SIZE-sizeof(FILE_HEAD) bytes
  75.        leer o saltar FILE_SIZE bytes
  76.      si no
  77.        leer el correspondiente bloque HEAD_TYPE:
  78.          leer HEAD_SIZE-7 bytes
  79.          si (HEAD_FLAGS & 0x8000)
  80.            leer ADD_SIZE bytes
  81.    Si no es necesario leer el bloque:
  82.      saltar HEAD_SIZE-7 bytes
  83.      si (HEAD_FLAGS & 0x8000)
  84.        saltar ADD_SIZE bytes
  85. 6. ir al punto 4.
  86.  
  87.  
  88.  ╔════════════════════════════════════════════════════════════════════════╗
  89.  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  Formato de los bloques  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  90.  ╚════════════════════════════════════════════════════════════════════════╝
  91.  
  92.  
  93.    Bloque de identificación ( MARK_HEAD )
  94.  
  95.  
  96. HEAD_CRC        Siempre 0x6152
  97. 2 bytes
  98.  
  99. HEAD_TYPE       Tipo de bloque: 0x72
  100. 1 byte
  101.  
  102. HEAD_FLAGS      Siempre 0x1a21
  103. 2 bytes
  104.  
  105. HEAD_SIZE       Tamaño del bloque = 0x0007
  106. 2 bytes
  107.  
  108.    El bloque de identificación es actualmente considerado como una
  109. secuencia fija de bytes: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
  110.  
  111.  
  112.  
  113.    cabecera de archivo ( MAIN_HEAD )
  114.  
  115.  
  116. HEAD_CRC        CRC de los campos HEAD_TYPE a RESERVED2
  117. 2 bytes
  118.  
  119. HEAD_TYPE       Tipo de bloque: 0x73
  120. 1 byte
  121.  
  122. HEAD_FLAGS      Flags:
  123. 2 bytes
  124.         0x01    - Atributo de volumen (archivo multi-volumen)
  125.         0x02    - Comentario de archivo presente
  126.         0x04    - Atributo de bloqueo de archivo
  127.         0x08    - Atributo de solidez (archivo sólido)
  128.         0x10    - No usado
  129.         0x20    - Información de autenticidad presente
  130.  
  131.         los demás bits de HEAD_FLAGS están reservados para
  132.         uso interno.
  133.  
  134. HEAD_SIZE       Tamaño total del bloque incluyendo el archivo,
  135. 2 bytes         comentarios y otros campos adicionales
  136.  
  137. RESERVED1       Reservado
  138. 2 bytes
  139.  
  140. RESERVED2       Reservado
  141. 4 bytes
  142.  
  143.  
  144. Comentario      presente si (HEAD_FLAGS & 0x02) != 0
  145.  
  146.  
  147.  
  148.    cabecera de fichero (Fichero en el archivo)
  149.  
  150.  
  151. HEAD_CRC        CRC de los campos desde HEAD_TYPE a FILEATTR
  152. 2 bytes         y el nombre del fichero
  153.  
  154. HEAD_TYPE       Tipo de bloque: 0x74
  155. 1 byte
  156.  
  157. HEAD_FLAGS      Flags:
  158. 2 bytes
  159.         0x01 - El fichero continúa del volumen anterior
  160.         0x02 - El fichero continúa en el siguiente volumen
  161.         0x04 - Fichero protegido con contraseña
  162.         0x08 - Comentario de fichero presente
  163.         0x10 - Se usa información del fichero anterior
  164.                (indicador de archivo sólido), sólo en
  165.                la versión 2.00 y posteriores
  166.  
  167.         Bits 7 6 5 (RAR 2.0 y posteriores)
  168.  
  169.              0 0 0  - diccionario de   64 Kb
  170.              0 0 1  - diccionario de  128 Kb
  171.              0 1 0  - diccionario de  256 Kb
  172.              0 1 1  - diccionario de  512 Kb
  173.              1 0 0  - diccionario de 1024 Kb
  174.              1 0 1  - reservado
  175.              1 1 0  - reservado
  176.              1 1 1  - el fichero es un directorio
  177.  
  178.         (HEAD_FLAGS & 0x8000) == 1, debido a que el tamaño
  179.         total del bloque es HEAD_SIZE + PACK_SIZE
  180.  
  181. HEAD_SIZE       Tamaño total del bloque incluyendo el nombre del
  182. 2 bytes         fichero, comentarios y otros campos adicionales.
  183.  
  184. PACK_SIZE       Tamaño del fichero comprimido
  185. 4 bytes
  186.  
  187. UNP_SIZE        Tamaño del fichero sin comprimir
  188. 4 bytes
  189.  
  190. HOST_OS         Sistema operativo usado para comprimir el archivo
  191. 1 byte                0 - MS DOS
  192.               1 - OS/2
  193.               2 - Win32
  194.               3 - Unix
  195.  
  196. FILE_CRC        CRC del fichero
  197. 4 bytes
  198.  
  199. FTIME           Fecha y hora en formato estandar MS DOS
  200. 4 bytes
  201.  
  202. UNP_VER         Versión de RAR necesaria para extraer el fichero
  203. 1 byte
  204.  
  205. METHOD          Método de compresión
  206. 1 byte
  207.  
  208. NAME_SIZE       Tamaño del nombre de fichero
  209. 2 bytes
  210.  
  211. ATTR            Atributos del fichero
  212. 4 bytes
  213.  
  214. FILE_NAME       Nombre del fichero - cadena de longitud NAME_SIZE bytes
  215.  
  216.  
  217. Comentario      presente si (HEAD_FLAGS & 0x08) != 0
  218.  
  219.  
  220.  
  221.   cabecera de comentario
  222.  
  223.  
  224. HEAD_CRC        CRC de los campos HEAD_TYPE a COMM_CRC
  225. 2 bytes
  226.  
  227. HEAD_TYPE       Tipo de bloque: 0x75
  228. 1 byte
  229.  
  230. HEAD_FLAGS      Flags
  231. 2 bytes
  232.  
  233. HEAD_SIZE       Tamaño del bloque + tamaño del comentario
  234. 2 bytes
  235.  
  236. UNP_SIZE        Tamaño del comentario sin comprimir
  237. 2 bytes
  238.  
  239. UNP_VER         Versión de RAR necesaria para extraer el comentario
  240. 1 byte
  241.  
  242. METHOD          Método de compresión
  243. 1 byte
  244.  
  245. COMM_CRC        CRC del comentario
  246. 2 bytes
  247.  
  248. COMMENT         Texto del comentario
  249.  
  250.  
  251.  
  252.   Bloque de información extra
  253.  
  254.  
  255. HEAD_CRC        CRC del bloque
  256. 2 bytes
  257.  
  258. HEAD_TYPE       Tipo de bloque: 0x76
  259. 1 byte
  260.  
  261. HEAD_FLAGS      Flags
  262. 2 bytes
  263.  
  264. HEAD_SIZE       Tamaño total del bloque
  265. 2 bytes
  266.  
  267. INFO            Otros datos
  268.  
  269.   Sub-bloque
  270.  
  271. Cualquier objecto del archivo (bloque o cabecera) puede ir seguido
  272. de un sub-bloque. El sub-bloque depende del objecto principal y
  273. puede ser borrado o movido a una nueva versión del archivo cuando
  274. este es actualizado.
  275.  
  276.  El sub-bloque contiene los siguientes campos:
  277.  
  278. HEAD_CRC        CRC
  279. 2 bytes
  280.  
  281. HEAD_TYPE       Tipo de cabecera: 0x77
  282. 1 byte
  283.  
  284. HEAD_FLAGS      Flags
  285. 2 bytes
  286.         (HEAD_FLAGS & 0x8000) == 1, ya que el tamaño total
  287.         es HEAD_SIZE + DATA_SIZE
  288.  
  289. HEAD_SIZE       Tamaño total del bloque
  290. 2 bytes
  291.  
  292. DATA_SIZE       Tamaño total de los datos
  293. 4 bytes
  294.  
  295. SUB_TYPE        Tipo de sub-bloque
  296. 2 bytes
  297.  
  298. RESERVED        Siempre 0
  299. 1 byte
  300.  
  301. Otros           Dependen del tipo de sub-bloque
  302. campos
  303.  
  304.  
  305.   Sub-bloque para atributos extendidos de OS/2
  306.  
  307.  
  308. HEAD_CRC        CRC
  309. 2 bytes
  310.  
  311. HEAD_TYPE       Tipo de cabecera: 0x77
  312. 1 byte
  313.  
  314. HEAD_FLAGS      Flags
  315. 2 bytes
  316.         (HEAD_FLAGS & 0x8000) == 1, ya que el tamaño total
  317.         es HEAD_SIZE + DATA_SIZE
  318.  
  319. HEAD_SIZE       Tamaño total del bloque
  320. 2 bytes
  321.  
  322. DATA_SIZE       Tamaño total de los datos (tamaño de los
  323.         atributos comprimidos)
  324. 4 bytes
  325.  
  326. SUB_TYPE        0x100
  327. 2 bytes
  328.  
  329. RESERVED        Siempre 0
  330. 1 byte
  331.  
  332. UNP_SIZE        Tamaño sin comprimir de los atributos
  333. 4 bytes
  334.  
  335. UNP_VER         Versión del RAR necesaria para descomprimir los
  336.         atributos
  337. 1 byte
  338.  
  339. METHOD          Método de compresión
  340. 1 byte
  341.  
  342. EA_CRC          CRC de los atributos
  343. 4 bytes
  344.  
  345.  
  346.  ╔════════════════════════════════════════════════════════════════════════╗
  347.  ║▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒  Notas para aplicaciones  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒║
  348.  ╚════════════════════════════════════════════════════════════════════════╝
  349.  
  350.  
  351.    1. Si en el futuro se añadiesen más bloques, su tamaño será incluido
  352.       en el campo HEAD_SIZE.
  353.  
  354.    2. Para procesar archivos SFX es necesario saltar el módulo SFX
  355.       buscando el bloque de identificación en el archivo. No hay ninguna
  356.       secuencia de identificación (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) en
  357.       el módulo SFX.
  358.  
  359.       Actualmente, el método más rápido para determinar si se trata de
  360.       un archivo Rar SFX es localizar la cadena 'RSFX' en el offset 0x1C.
  361.       El uso de este método, que no estaba documentado, no se asegurá
  362.       para futuras versiones de RAR.
  363.  
  364.    3. El CRC se calcula usando el polinomio estándar 0xEDB88320. En
  365.       caso de que el tamaño del CRC sea de menos de 4 bytes, sólo los bytes
  366.       de orden más bajo serán usados.
  367.  
  368.    4. Métodos de compresión:
  369.      0x30 - no comprimir
  370.      0x31 - compresión super-rápida
  371.      0x32 - compresión rápida
  372.      0x33 - compresión normal
  373.      0x34 - buena compresión
  374.      0x35 - compresión máxima
  375.  
  376.    5. La versión necesaria para la extracción está codificada como
  377.       10 * versión mayor + versión menor.
  378.  
  379.